package mb.commons;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

/**
 * Klasa po której dziedziczą klasy mające dostęp do bazy danych.
 * @author Michał Budziło
 *
 */
public class AbstractDAO {

	protected Connection conn;
	protected PreparedStatement prepStmt;
	protected Statement stmt;
	protected String query = null;
	protected XmlHelper helper;
	protected ResultSet rs;

	/**
	 * Klasa, po której dziedziczą wszystkie klasy dostępu do bazy danych.
	 */
	public AbstractDAO() {
		conn = DbConnection.getConnection();
	}

	/**
	 * Metoda pobiera login aktualnie zalogowanego użytkownika
	 * @return login
	 */
	public String getLogin() {
		FacesContext context = FacesContext.getCurrentInstance();
		HttpServletRequest myRequest = (HttpServletRequest) context
				.getExternalContext().getRequest();
		HttpSession mySession = myRequest.getSession();
		String login = (String) mySession.getAttribute("nick");
		return login;
	}

	

	/**
	 * Metoda zamyka  połączenia.
	 */
	protected void close() {
		try {
			if (rs != null)
				rs.close();
			if (prepStmt != null)
				prepStmt.close();
			if (stmt != null)
				stmt.close();
		} catch (SQLException e) {
			error(e.getErrorCode() + " : " + e.getMessage());
			e.printStackTrace();
		}

	}



	/**
	 * Metoda wysyła do widoku strony komunikat o błędzie z bazy danych
	 * @param error komunikat błędu
	 */
	public void error(String error)
	{
		FacesMessage facesMsg = new FacesMessage(FacesMessage.SEVERITY_ERROR, error, "Error message.");
		FacesContext.getCurrentInstance().addMessage(null, facesMsg);
		
	}
}
